package com.manager.commons.utils;

//                   _ooOoo_    
//                  o8888888o    
//                  88" . "88    
//                  (| -_- |)    
//                   O\ = /O    
//               ____/'---'\____    
//              /. '\\| : |//' .\    
//             // \\||| : |||// \\   
//            // _|||||-:-|||||_ \\    
//           // | | \\\ - /// | | \\
//           || |_| ''\---/'' |_| || 
//            \ .-\___/'-'\___/-. /    
//          ___\. .' /--.--\ '. ./___    
//        .""'< `.___\_<|>_/___.' >'"".    
//       | |: `- \`.|'\ _ /'|.`/ -` :| |    
//        \ \ `-. \_ __\ /__ _/ .-` / /    
//======'-.___`-.___\_______/___.-`___.-'======    
//                   '=---='    
//.................................................    
//写一哈代码，你就青叫唤；信龟儿设计，你逗是傻逼。
//永无Bug，啷个可能！求佛主保佑也没球用！

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;

import com.manager.commons.log.LogFactory;

/**
 * ReflectUtil
 * @author H
 * @version V1.0
 */
public class ReflectUtil {

	private static final Logger logger = LogFactory.getLogger(ReflectUtil.class);

	/**
	 * 获取key
	 * @param obj
	 * @return
	 */
	public static Map<String, Object> getKeyAndValue(Object obj) {
		Map<String, Object> map = new HashMap<String, Object>();
		// 得到类对象
		Class<?> clazz = obj.getClass();
		/* 得到类中的所有属性集合 */
		Field[] fields = clazz.getDeclaredFields();
		for (Field field : fields) {
			// 设置些属性是可以访问的
			field.setAccessible(true);
			Object val = new Object();
			try {
				val = field.get(obj);
				map.put(field.getName(), val);
			} catch (Exception e) {
				logger.error(e.getMessage(), e);
			}
		}
		return map;
	}

	/**
	 * 获取key value
	 * @param object
	 * @return
	 */
	public static List<Map<String, Object>> getKeysAndValues(List<Object> object) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		for (Object obj : object) {
			Map<String, Object> listChild = new HashMap<String, Object>();
			Class<?> clazz = obj.getClass();
			Field[] fields = clazz.getDeclaredFields();
			for (Field field : fields) {
				// 设置些属性是可以访问的
				field.setAccessible(true);
				Object val = new Object();
				try {
					val = field.get(obj);
					listChild.put(field.getName(), val);
				} catch (Exception e) {
					logger.error(e.getMessage(), e);
				}
			}
			list.add(listChild);
		}
		return list;
	}

	/**
	 * 根据key获取value
	 * @param obj
	 * @param key
	 * @return
	 */
	public static Object getValueByKey(Object obj, String key) {
		// 得到类对象
		Class<?> clazz = obj.getClass();
		/* 得到类中的所有属性集合 */
		Field[] fields = clazz.getDeclaredFields();
		for (Field field : fields) {
			// 设置些属性是可以访问的
			field.setAccessible(true);
			try {
				if (field.getName().endsWith(key)) {
					return field.get(obj);
				}
			} catch (Exception e) {
				logger.error(e.getMessage(), e);
			}
		}
		return "";
	}

	/**
	 * 根据key获取values
	 * @param object
	 * @param key
	 * @return
	 */
	public static List<Object> getValuesByKey(List<Object> object, String key) {
		List<Object> list = new ArrayList<Object>();
		for (Object obj : object) {
			Class<?> clazz = obj.getClass();
			Field[] fields = clazz.getDeclaredFields();
			for (Field field : fields) {
				// 设置些属性是可以访问的
				field.setAccessible(true);
				try {
					if (field.getName().endsWith(key)) {
						list.add(field.get(obj));
					}
				} catch (Exception e) {
					logger.error(e.getMessage(), e);
				}
			}
		}
		return list;
	}
}